package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICompanyEmpInfoRequireDAO;
import org.jsola.hr.dto.CompanyAllEmpInfoRequireUpdateDTO;
import org.jsola.hr.dto.CompanyEmpInfoRequireAddDTO;
import org.jsola.hr.dto.CompanyEmpInfoRequireUpdateDTO;
import org.jsola.hr.entity.CompanyEmpInfoRequireDO;
import org.jsola.hr.query.CompanyEmpInfoRequireQuery;
import org.jsola.hr.vo.CompanyEmpAllInfoRequireVO;
import org.jsola.hr.vo.CompanyEmpInfoRequireListVO;
import org.jsola.hr.vo.CompanyEmpInfoRequireVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface ICompanyEmpInfoRequireService extends IService<ICompanyEmpInfoRequireDAO, CompanyEmpInfoRequireDO> {

    /**
     * 新增公司员工所需信息
     * @param companyEmpInfoRequireAddDTO 新增公司员工所需信息DTO
     * @param tokenUser 当前用户
     * @return 公司员工所需信息详情信息
     */
    CompanyEmpInfoRequireVO save(CompanyEmpInfoRequireAddDTO companyEmpInfoRequireAddDTO, TokenUser tokenUser);

    /**
     * 修改公司员工所需信息
     * @param companyEmpInfoRequireUpdateDTO 修改公司员工所需信息DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(CompanyEmpInfoRequireUpdateDTO companyEmpInfoRequireUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除公司员工所需信息，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param companyEmpInfoRequireIds 公司员工所需信息id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...companyEmpInfoRequireIds);

    /**
     * 根据公司员工所需信息id查找
     * @param companyEmpInfoRequireId 公司员工所需信息id
     * @param siteId 所属站点id
     * @return 公司员工所需信息详情信息
     */
    CompanyEmpInfoRequireVO selectById(String companyEmpInfoRequireId, String siteId);

    /**
     * 查询公司员工所需信息
     * @param companyEmpInfoRequireQuery 查询条件
     * @param siteId 所属站点id
     * @return 公司员工所需信息列表信息
     */
    List<CompanyEmpInfoRequireListVO> select(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery, String siteId);

    /**
    * 查询公司员工所需信息记录数
    * @param companyEmpInfoRequireQuery 查询条件
    * @param siteId 所属站点id
    * @return 公司员工所需信息记录数
    */
    int selectCount(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery, String siteId);

    /**
     * 分页查询公司员工所需信息
     * @param companyEmpInfoRequireQuery 查询条件
     * @param siteId 所属站点id
     * @return 公司员工所需信息列表信息
     */
    Page<CompanyEmpInfoRequireListVO> selectPage(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery, String siteId);


    /**
     * 根据公司员工所需信息id查找
     * @param companyEmpInfoRequireId 公司员工所需信息id
     * @param siteId 所属站点id
     * @return 公司员工所需信息
     */
    CompanyEmpInfoRequireDO selectDOById(String companyEmpInfoRequireId, String siteId);

    /**
     * 查询公司员工所需信息
     * @param companyEmpInfoRequireQuery 查询条件
     * @param siteId 所属站点id
     * @return 公司员工所需信息列表
     */
    List<CompanyEmpInfoRequireDO> selectDO(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery, String siteId);

    /**
     * 根据公司id查询公司员工所需信息
     *
     * @param companyId 公司id
     * @param type      场景
     * @param tokenUser 当前用户
     * @return 公司员工所需信息
     */
    CompanyEmpAllInfoRequireVO findByCompanyId(String companyId, String type, TokenUser tokenUser);

    /**
     * 修改公司某一员工信息为(0:不需要,1:需要,2:必填)(公司id为all为修改全部公司)
     *
     * @param id    公司员工所需信息id
     * @param code  要修改的code
     * @param value 要修改成的值
     * @return 公司员工所需信息详情
     */
    int updateInfoRequireById(String id, String code, Integer value, String siteId);

    /**
     * 修改公司某一员工信息为(0:不需要,1:需要,2:必填)(公司id为all为修改全部公司)
     *
     * @param companyId 公司员工所需信息id
     * @param code      要修改的code
     * @param value     要修改成的值
     * @return 公司员工所需信息详情
     */
    int updateInfoRequireByCompanyId(String companyId, String type, String code, Integer value, String siteId);

    /**
     * 修改公司员工所需信息(员工信息和员工关联信息的)
     *
     * @param requireUpdateDTO 员工所需信息
     * @param tokenUser        当前用户
     * @return 修改数量
     */
    int updateRalation(CompanyAllEmpInfoRequireUpdateDTO requireUpdateDTO, TokenUser tokenUser);
}


